home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / bin / foo2slx-wrapper < prev    next >
Text File  |  2009-10-19  |  17KB  |  708 lines

  1. #!/bin/sh
  2.  
  3. #* Copyright (C) 2003-2006  Rick Richardson
  4. #*
  5. #* This program is free software; you can redistribute it and/or modify
  6. #* it under the terms of the GNU General Public License as published by
  7. #* the Free Software Foundation; either version 2 of the License, or
  8. #* (at your option) any later version.
  9. #*
  10. #* This program is distributed in the hope that it will be useful,
  11. #* but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. #* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. #* GNU General Public License for more details.
  14. #*
  15. #* You should have received a copy of the GNU General Public License
  16. #* along with this program; if not, write to the Free Software
  17. #* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. #*
  19. #* Authors: Rick Richardson <rick.richardson@comcast.net>
  20.  
  21. VERSION='$Id: foo2slx-wrapper.in,v 1.14 2009/05/11 17:35:55 rick Exp $'
  22.  
  23. #
  24. # Printer Notes:
  25. #
  26. # Lexmark C500        -
  27. #
  28.  
  29. PROGNAME="$0"
  30. BASENAME=`basename $PROGNAME`
  31. PREFIX=/usr
  32. SHARE=$PREFIX/share/foo2slx
  33. PATH=$PATH:/sw/bin:/opt/local/bin
  34.  
  35. #
  36. #    Log the command line, for debugging and problem reports
  37. #
  38. if [ -x /usr/bin/logger -o -x /bin/logger ]; then
  39.     logger -t "$BASENAME" -p lpr.info -- "$BASENAME $@" </dev/null
  40. fi
  41.  
  42. usage() {
  43.     cat <<EOF
  44. Usage:
  45.     $BASENAME [options] [ps-file]
  46.  
  47.     Foomatic printer wrapper for the foo2slx printer driver.
  48.     This script reads a Postscript ps-file or standard input
  49.     and converts it to Software Imaging K.K. SLX printer format.
  50.  
  51. Normal Options:
  52. -c                Print in color (else monochrome)
  53. -m media          Media code to send to printer [$MEDIA]
  54.                     0=plain, 1=transparency, 2=labels, 3=thick1, 4=envelope1,
  55.             5=thin, 6=thick2, 7=envelope2, 8=middle, 9=special
  56. -p paper          Paper code [$PAPER]
  57.                     2=a4, 4=b5, 5=b5iso, 6=letter, 8=executive, 9=legal,
  58.                     10=env#10, 11=envDL
  59. -n copies         Number of copies [$COPIES]
  60. -r <xres>x<yres>  Set device resolution in pixels/inch [$RES]
  61. -s source         Source code to send to printer [$SOURCE]
  62.                     0=auto, 1=cassette1
  63.             Code numbers may vary with printer model.
  64. -2/-3/-4/-6/-8/-10/-12/-14/-15/-16/-18
  65.                   Print with N-up (requires psutils)
  66. -o orient         For N-up: -op is portrait, -ol is landscape, -os is seascape.
  67.  
  68. Printer Tweaking Options:
  69. -u <xoff>x<yoff>  Set offset of upper left printable in pixels [varies]
  70. -l <xoff>x<yoff>  Set offset of lower right printable in pixels [varies]
  71. -L mask           Send logical clipping values from -u/-l in ZjStream [3]
  72.                   0=no, 1=Y, 2=X, 3=XY
  73.  
  74. Color Tweaking Options:
  75. -g gsopts         Additional options to pass to Ghostscript, such as
  76.                   -dDITHERPPI=nnn, etc.  May appear more than once. []
  77. -G profile.icm    Convert profile.icm to a Postscript CRD using icc2ps and
  78.                   adjust colors using the setcolorrendering PS operator.
  79.                   $SHARE/icm/ will be searched for profile.icm.
  80. -I intent         Select profile intent from ICM file [$INTENT]
  81.                   0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute
  82. -G gamma-file.ps  Prepend gamma-file to the Postscript input to perform
  83.                   color correction using the setcolortransfer PS operator.
  84.  
  85. Debugging Options:
  86. -S plane          Output just a single color plane from a color print [all]
  87.                   1=Cyan, 2=Magenta, 3=Yellow, 4=Black
  88. -D lvl            Set Debug level [$DEBUG]
  89. -V                $VERSION
  90. EOF
  91.  
  92.     exit 1
  93. }
  94.  
  95. #
  96. #       Report an error and exit
  97. #
  98. error() {
  99.     echo "$BASENAME: $1" >&2
  100.     exit 1
  101. }
  102.  
  103. dbgcmd() {
  104.     if [ $DEBUG -ge 1 ]; then
  105.         echo "$@" >&2
  106.     fi
  107.     "$@"
  108. }
  109.  
  110. #
  111. #    N-up-ify the job.  Requires psnup from psutils package
  112. #
  113. nup() {
  114.     case "$NUP" in
  115.     [2368]|1[0458])
  116.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.3in -p$paper -q
  117.     ;;
  118.     [49]|1[26])
  119.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.5in -p$paper -q
  120.     ;;
  121.     *)
  122.     error "Illegal call to nup()."
  123.     ;;
  124.     esac
  125. }
  126.  
  127. #
  128. #       Process the options
  129. #
  130.  
  131. # Try to use a local copy of GhostScript 8.54, if available.  Otherwise,
  132. # fallback to whatever the Linux distro has installed (usually 7.07)
  133. #
  134. # N.B. := operator used here, when :- would be better, because "ash"
  135. # doesn't have :-
  136. if gs.foo -v >/dev/null 2>&1; then
  137.         GSBIN=${GSBIN:-gs.foo}
  138. else
  139.         GSBIN=${GSBIN:-gs}
  140. fi
  141.  
  142. CMDLINE="$*"
  143. DEBUG=0
  144. DUPLEX=1
  145. COLOR=
  146. COLORMODE=default
  147. MODEL=0
  148. QUALITY=wts
  149. MEDIA=0
  150. COPIES=1
  151. test -r /etc/papersize && PAPER=$(cat /etc/papersize)
  152. test "$PAPER" || PAPER=6
  153. RES=600x600
  154. SOURCE=0
  155. NUP=
  156. CLIP_UL=
  157. CLIP_LR=
  158. CLIP_LOG=
  159. BC=
  160. AIB=
  161. NOPLANES=
  162. COLOR2MONO=
  163. GAMMAFILE=default
  164. INTENT=0
  165. GSOPTS=
  166. EXTRAPAD=
  167. SAVETONER=
  168. NUP_ORIENT=
  169. GSDEV=-sDEVICE=pbmraw
  170. # What mode to use if the user wants us to pick the "best" mode
  171. case `$GSBIN --version` in
  172. 7*)    DEFAULTCOLORMODE=10
  173.     ;;
  174. 8.1*)
  175.     DEFAULTCOLORMODE=10
  176.     QUALITY=1
  177.     ;;
  178. *)    DEFAULTCOLORMODE=10
  179.     ;;
  180. esac
  181. while getopts "1:23456789o:b:cC:d:g:l:u:L:m:n:p:q:r:s:tz:ABS:D:G:I:PX:Vh?" opt
  182. do
  183.     case $opt in
  184.     b)    GSBIN="$OPTARG";;
  185.     c)    COLOR=-c;;
  186.     d)    DUPLEX="$OPTARG";;
  187.     g)    GSOPTS="$GSOPTS $OPTARG";;
  188.     m)    MEDIA="$OPTARG";;
  189.     n)    COPIES="$OPTARG";;
  190.     p)    PAPER="$OPTARG";;
  191.     q)    QUALITY="$OPTARG";;
  192.     r)    RES="$OPTARG";;
  193.     s)    SOURCE="$OPTARG";;
  194.     t)    SAVETONER="-t";;
  195.     z)    MODEL="$OPTARG";;
  196.     l)    CLIP_LR="-l $OPTARG";;
  197.     u)    CLIP_UL="-u $OPTARG";;
  198.     L)    CLIP_LOG="-L $OPTARG";;
  199.     A)    AIB=-A;;
  200.     B)    BC=-B;;
  201.     C)    COLORMODE="$OPTARG";;
  202.     S)    COLOR2MONO="-S$OPTARG";;
  203.     D)    DEBUG="$OPTARG";;
  204.     G)    GAMMAFILE="$OPTARG";;
  205.     I)    INTENT="$OPTARG";;
  206.     P)    NOPLANES=-P;;
  207.     X)    EXTRAPAD="-X $OPTARG";;
  208.     [234689])    NUP="$opt";;
  209.     [57])    error "Can't find acceptable layout for $opt-up";;
  210.     1)    case "$OPTARG" in
  211.         [024568])    NUP="1$OPTARG";;
  212.         *)    error "Can't find acceptable layout for 1$OPTARG-up";;
  213.         esac
  214.         ;;
  215.     o)    case "$OPTARG" in
  216.         l*)    NUP_ORIENT=-l;;
  217.         s*)    NUP_ORIENT=-r;;
  218.         p*|*)    NUP_ORIENT=;;
  219.         esac;;
  220.     V)    echo "$VERSION"; foo2slx -V; foo2zjs-pstops -V; exit 0;;
  221.     h|\?)
  222.         if [ "$CMDLINE" != "-?" -a "$CMDLINE" != -h ]; then
  223.             echo "Illegal command:"
  224.             echo "    $0 $CMDLINE"
  225.             echo
  226.         fi
  227.         usage;;
  228.     esac
  229. done
  230. shift `expr $OPTIND - 1`
  231.  
  232. #
  233. # If there is an argument left, take it as the file to print.
  234. # Else, the input comes from stdin.
  235. #
  236. if [ $# -ge 1 ]; then
  237.     if [ "$LPJOB" = "" ]; then
  238.     : # LPJOB="$1"
  239.     fi
  240.     exec < $1
  241. fi
  242.  
  243. #
  244. case "$QUALITY" in
  245. 0)
  246.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  247.     ;;
  248. 1)
  249.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  250.     ;;
  251. 2)
  252.     GSOPTS="-dMaxBitmap=500000000 $GSOPTS"
  253.     ;;
  254. wts)
  255.     GSOPTS="-dCOLORSCREEN -dMaxBitmap=500000000 $GSOPTS"
  256.     ;;
  257. esac
  258.  
  259. #
  260. #    Validate model code
  261. #
  262. case "$MODEL" in
  263. 0|1)    ;;
  264. *)    error "Unknown model code $MODEL";;
  265. esac
  266.  
  267. #
  268. #    Validate media code
  269. #
  270. case "$MEDIA" in
  271. 0|plain|standard)    MEDIA=0;;
  272. 1|transparency)        MEDIA=1;;
  273. 2|labels)        MEDIA=2;;
  274. 9|special)        MEDIA=9;;
  275. 5|thin)            MEDIA=5;;
  276. 8|middle)        MEDIA=8;;
  277. 3|thick1)        MEDIA=3;;
  278. 6|thick2)        MEDIA=6;;
  279. 4|envelope1)        MEDIA=4;;
  280. 7|envelope2)        MEDIA=7;;
  281. [0-9]*)        ;;
  282. *)        error "Unknown media code $MEDIA";;
  283. esac
  284.  
  285. #
  286. #    Validate source (InputSlot) code
  287. #
  288. case "$SOURCE" in
  289. 1|cassette1)    SOURCE=1;;
  290. 0|auto)        SOURCE=0;;
  291. [0-9]*)        ;;
  292. *)        error "Unknown source code $SOURCE";;
  293. esac
  294.  
  295. #
  296. #    Validate Duplex code
  297. #
  298. case "$DUPLEX" in
  299. 1|off|none)    DUPLEX=1;;
  300. 2|long*)    DUPLEX=2;;
  301. 3|short*)    DUPLEX=3;;
  302. [0-9]*)        ;;
  303. *)        error "Unknown duplex code $DUPLEX";;
  304. esac
  305.  
  306. #
  307. #    Validate Resolution
  308. #
  309. case "$RES" in
  310. 600x600)    ;;
  311. 1200x600)    ;;
  312. *)        error "Illegal resolution $RES";;
  313. esac
  314.  
  315. #
  316. #    Figure out the paper dimensions in pixels/inch, and set the
  317. #    default clipping region.  Unfortunately, this is a trouble
  318. #    area for ZjStream printers.  Various versions of ZjS print
  319. #    engines react differently when asked to print into their
  320. #    unprintable regions.
  321. #
  322. set_clipping() {
  323.     ulx=$1; uly=$2
  324.     lrx=$3; lry=$4
  325.  
  326.     # Set clipping region if it isn't already set
  327.     if [ "$CLIP_UL" = "" ]; then
  328.     case "$RES" in
  329.     600x600)    ulx=`expr $ulx / 2`;;
  330.     2400x600)    ulx=`expr $ulx \* 2`;;
  331.     esac
  332.     CLIP_UL="-u ${ulx}x${uly}"
  333.     fi
  334.     if [ "$CLIP_LR" = "" ]; then
  335.     case "$RES" in
  336.     600x600)    lrx=`expr $lrx / 2`;;
  337.     2400x600)    lrx=`expr $lrx \* 2`;;
  338.     esac
  339.     CLIP_LR="-l ${lrx}x${lry}"
  340.     fi
  341. }
  342.  
  343. case "$PAPER" in
  344. Custom*)
  345.         case "$PAPER" in
  346.         Custom\.[0-9]*\x[0-9]*)
  347.             XDIM=`echo "$PAPER" | sed -e 's/Custom\.//' -e 's/x.*//'`
  348.             YDIM=`echo "$PAPER" | sed -e 's/Custom\.//' -e 's/.*x//'`
  349.             ;;
  350.         *)
  351.         #%%BeginFeature: *CustomPageSize True
  352.         #216
  353.         #360
  354.         #0
  355.         #0
  356.         #0
  357.         #pop pop pop pop pop
  358.  
  359.         #%%BeginFeature: *CustomPageSize True
  360.         #792.000000 612.000000 1 0.000000 0.000000
  361.         #pop pop pop pop pop
  362.  
  363.         if [ $DEBUG = 0 ]; then
  364.             TMPFILE=/tmp/cus$$
  365.         else
  366.             TMPFILE=/tmp/custom.ps
  367.         fi
  368.         cat >$TMPFILE
  369.         exec <$TMPFILE
  370.  
  371.         tmp=`head -n 10000 $TMPFILE \
  372.             | sed -n '/CustomPageSize/{n;p;n;p;}' \
  373.             | tr '\n' ' '`
  374.         case "$tmp" in
  375.         [0-9]*\ [0-9]*)
  376.             XDIM=`echo "$tmp" | sed 's/ .*//'`
  377.             YDIM=`echo "$tmp" | sed -e 's/^[^ ]* //' -e 's/ .*//'`
  378.             ;;
  379.         *)
  380.             if [ $DEBUG = 0 ]; then rm -f $TMPFILE; fi
  381.             error "Custom page size [XY]DIM != 1-99999"
  382.             ;;
  383.         esac
  384.         ;;
  385.         esac
  386.         XDIM=`dc -e "$XDIM 1200* 72/p"`
  387.         YDIM=`dc -e "$YDIM 600* 72/p"`
  388.         PAPER=255;        paper=letter;
  389.         MEDIA=4
  390.                 set_clipping 2 100     2 100
  391.         ;;
  392. 6|letter)    PAPER=6;    paper=letter;    XDIM="10200"; YDIM="6600"
  393.         case "$MODEL" in
  394.         0)    set_clipping 204 102    204 106;;
  395.         1)    set_clipping 192 96    192 96;;
  396.         # 1)    set_clipping 96 96    288 96;;
  397.         esac
  398.         ;;
  399. 2|a4|A4)    PAPER=2;    paper=a4;        XDIM="9920";  YDIM="7016"
  400.         case "$MODEL" in
  401.         0)    set_clipping 200 100    200 100 ;;
  402.         1)    set_clipping 192 96    192 96;;
  403.         esac
  404.         ;;
  405. 13|a5|A5)    PAPER=13;    paper=a5;        XDIM="6992";  YDIM="4960"
  406.         case "$MODEL" in
  407.         0)    set_clipping 200 100    200 100;;
  408.         1)    set_clipping 192 96    192 96;;
  409.         esac
  410.         ;;
  411. 4|b5|B5)    PAPER=4;    paper=b5;        XDIM="8598";  YDIM="6070"
  412.         case "$MODEL" in
  413.         0)    set_clipping 207 107    207 107;;
  414.         1)    set_clipping 192 96    192 96;;
  415.         esac
  416.         ;;
  417. 5|b5iso)    PAPER=5;    paper=b5iso;        XDIM="8220";  YDIM="6024"
  418.         case "$MODEL" in
  419.         0)    set_clipping 207 107    207 107;;
  420.         1)    set_clipping 192 96    192 96;;
  421.         esac
  422.         ;;
  423. 8|executive)    PAPER=8;    paper=executive; XDIM="8700";  YDIM="6300"
  424.         case "$MODEL" in
  425.         0)    set_clipping 206 102    206 102;;
  426.         1)    set_clipping 192 96    192 96;;
  427.         esac
  428.         ;;
  429. 9|legal)    PAPER=9;    paper=legal;     XDIM="10200"; YDIM="8400"
  430.         case "$MODEL" in
  431.         0)    set_clipping 204 102    204 106;;
  432.         1)    set_clipping 192 96    192 96;;
  433.         esac
  434.         ;;
  435. 10|"env#10")    PAPER=10;    paper=env10;     XDIM="4950";  YDIM="5700"
  436.         case "$MODEL" in
  437.         0)    set_clipping 171 78    171 78;;
  438.         1)    set_clipping 171 78    171 78;;
  439.         esac
  440.         ;;
  441. 11|envDL)    PAPER=11;    paper=envDL;     XDIM="5200";  YDIM="5200"
  442.         case "$MODEL" in
  443.         0)    set_clipping 176 84    176 84;;
  444.         1)    set_clipping 176 84    176 84;;
  445.         esac
  446.         ;;
  447.  
  448. 28|envC5)    PAPER=28;    paper=envC5;     XDIM="7650";  YDIM="5408"
  449.         case "$MODEL" in
  450.         0)    set_clipping 170 80    169 80;;
  451.         1)    set_clipping 170 80    169 80;;
  452.         esac
  453.         ;;
  454. 34|envB5)    PAPER=34;    paper=envB5;     XDIM="8316";  YDIM="5892"
  455.         case "$MODEL" in
  456.         0)    set_clipping 174 74    174 74;;
  457.         1)    set_clipping 174 74    174 74;;
  458.         esac
  459.         ;;
  460. 37|envMonarch)    PAPER=37;    paper=envMonarch;XDIM="4650";  YDIM="4500"
  461.         case "$MODEL" in
  462.         0)    set_clipping 174 78    173 78;;
  463.         1)    set_clipping 174 78    173 78;;
  464.         esac
  465.         ;;
  466. *)        error "Unimplemented paper code $PAPER";;
  467. esac
  468. # e.g. /usr/share/ghostscript/7.07/lib/gs_statd.ps
  469. PAPERSIZE="-sPAPERSIZE=$paper";
  470.  
  471. case "$RES" in
  472. 600x600)    XDIM=`expr $XDIM / 2`;;
  473. 1200x600)    ;;
  474. esac
  475. DIM="${XDIM}x${YDIM}"
  476.  
  477. #
  478. # Filter thru psnup if N-up printing has been requested
  479. #
  480. case $NUP in
  481. [234689]|1[024568])    PREFILTER="nup";;
  482. *)            PREFILTER=cat;;
  483. esac
  484. if [ "$DEBUG" -ge 9 ]; then
  485.     PREFILTER="tee /tmp/$BASENAME.ps"
  486. fi
  487.  
  488. #
  489. #    Overload -G.  If the file name ends with ".icm" or ".ICM"
  490. #    then convert the ICC color profile to a Postscript CRD,
  491. #    then prepend it to the users job.  Select the intent
  492. #    using the -I option.
  493. #
  494.  
  495. create_crd() {
  496.     #
  497.     # Create a Postscript CRD
  498.     #
  499.     ICC2PS=$PREFIX/bin/foo2zjs-icc2ps
  500.     if [ -x $ICC2PS ]; then
  501.     case "$GAMMAFILE" in
  502.     none | none.icm | */none.icm)
  503.         ;;
  504.     *)
  505.         if [ -x /usr/bin/logger ]; then
  506.         logger -t "$BASENAME" -p lpr.info -- \
  507.         "`basename $ICC2PS` -o $GAMMAFILE -t$INTENT > $ICCTMP.crd.ps"
  508.         fi
  509.         $ICC2PS -o $GAMMAFILE -t$INTENT > $ICCTMP.crd.ps 2>$ICCTMP.log \
  510.         || error "Problem converting .ICM file to Postscript"
  511.         ;;
  512.     esac
  513.  
  514.     PSTOPS_OPTS="$PSTOPS_OPTS -c"
  515.     cat > $ICCTMP.usecie.ps <<-EOF
  516.         %!PS-Adobe-3.0
  517.         <</UseCIEColor true>>setpagedevice
  518.     EOF
  519.     if [ "$QUALITY" = wts ]; then
  520.         cat >> $ICCTMP.usecie.ps <<-EOF
  521.         << /UseWTS true >> setuserparams
  522.         <<
  523.             /AccurateScreens true
  524.             /HalftoneType 1
  525.             /HalftoneName (Round Dot Screen) cvn
  526.             /SpotFunction { 180 mul cos exch 180 mul cos add 2 div}
  527.             /Frequency 137
  528.             /Angle 37
  529.         >> sethalftone
  530.         EOF
  531.     fi
  532.     cat > $ICCTMP.selcrd.ps <<-EOF
  533.         /Current /ColorRendering findresource setcolorrendering
  534.     EOF
  535.     case "$GAMMAFILE" in
  536.     none | none.icm | */none.icm) GAMMAFILE="$ICCTMP.usecie.ps";;
  537.     *)    GAMMAFILE="$ICCTMP.usecie.ps $ICCTMP.crd.ps $ICCTMP.selcrd.ps";;
  538.     esac
  539.     else
  540.     GAMMFILE=
  541.     fi
  542. }
  543.  
  544. if [ $DEBUG -gt 0 ]; then
  545.     ICCTMP=/tmp/icc
  546. else
  547.     ICCTMP=/tmp/icc$$
  548. fi
  549.  
  550. if [ "" = "$COLOR" ]; then
  551.     COLORMODE=
  552.     GAMMAFILE=
  553. else
  554.     case "$COLORMODE" in
  555.     default)    COLORMODE=$DEFAULTCOLORMODE;;
  556.     esac
  557.     case "$GAMMAFILE" in
  558.     default)    GAMMAFILE=lexRPCA2000.icm;;
  559.     esac
  560. fi
  561.  
  562. CRDBASE="$PREFIX/share/foo2slx/crd"
  563. case "$RES" in
  564.     600x600)    SCREEN=screen1200.ps;;
  565.     1200x600)    SCREEN=screen1200.ps;;
  566. esac
  567.  
  568. PSTOPS_OPTS="-n"
  569.  
  570. case "$COLORMODE" in
  571. 0|"")
  572.     # Monochrome
  573.     ;;
  574. 10|icm)
  575.     # Use old ICM method
  576.     AIB=-A
  577.     BC=-B
  578.     case "$GAMMAFILE" in
  579.     none | none.icm | */none.icm)
  580.     create_crd
  581.     ;;
  582.     *.icm|*.ICM|*.icc|*.ICC)
  583.     #
  584.     # Its really an .ICM file, not a gamma file.
  585.     #
  586.     # The file can be a full path name, or the name of a file in $SHARE/icm/
  587.     #
  588.     if [ -r "$GAMMAFILE" ]; then
  589.         create_crd
  590.     elif [ -r "$SHARE/icm/$GAMMAFILE" ]; then
  591.         GAMMAFILE="$SHARE/icm/$GAMMAFILE"
  592.         create_crd
  593.     else
  594.         GAMMAFILE=
  595.     fi
  596.     ;;
  597.     esac
  598.     ;;
  599. 1|photo)
  600.     # Photo
  601.     GAMMAFILE="$CRDBASE/prolog.ps"
  602.     GAMMAFILE="$GAMMAFILE $CRDBASE/2300w-1200@150-l250-kx,ucr125,75-per.crd"
  603.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  604.     ;;
  605. 2|graphics)
  606.     # Photo and Text
  607.     GAMMAFILE="$CRDBASE/prolog.ps"
  608.     #GAMMAFILE="$GAMMAFILE $CRDBASE/2300w-1200@150-l250-kx,ucr100,75-per.crd"
  609.     GAMMAFILE="$GAMMAFILE $CRDBASE/kh.crd"
  610.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  611.     ;;
  612. 3|text)
  613.     # Graphic and Text
  614.     GAMMAFILE="$CRDBASE/prolog.ps"
  615.     #GAMMAFILE="$GAMMAFILE $CRDBASE/2300w-1200@150-l250-kx,ucr100,50-per.crd"
  616.     GAMMAFILE="$GAMMAFILE $CRDBASE/kx.crd"
  617.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  618.     ;;
  619. 4|tonersave)
  620.     # Reduced toner
  621.     GAMMAFILE="$CRDBASE/prolog.ps"
  622.     GAMMAFILE="$GAMMAFILE $CRDBASE/2300w-1200@150-l250-kx,ucr100,0-per.crd"
  623.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  624.     ;;
  625. *.crd)
  626.     GAMMAFILE="$CRDBASE/prolog.ps"
  627.     if [ -f $COLORMODE ]; then
  628.     GAMMAFILE="$GAMMAFILE $COLORMODE"
  629.     elif [ -f $CRDBASE/$COLORMODE ]; then
  630.     GAMMAFILE="$GAMMAFILE $CRDBASE/$COLORMODE"
  631.     else
  632.     error "Can't find CRD '$COLORMODE' in . or in $CRDBASE"
  633.     fi
  634.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  635.     ;;
  636. *)
  637.     error "Unknown color method '$COLORMODE'"
  638.     ;;
  639. esac
  640.  
  641. if [ "$COLOR" != "" -a "$QUALITY" = wts ]; then
  642.     PSTOPS_OPTS="$PSTOPS_OPTS -w"
  643. fi
  644.  
  645. if [ "" != "$COLOR" ]; then
  646.     if [ "" = "$AIB" -a "" = "$BC" ]; then
  647.     # Faster, but can't handle AllIsBlack or BlackClears
  648.     GSDEV=-sDEVICE=pksmraw
  649.     else
  650.     # Can't handle different size pages
  651.     GSDEV=-sDEVICE=bitcmyk
  652.     fi
  653. fi
  654.  
  655. #
  656. #    Figure out USERNAME
  657. #
  658. if [ "$LPUSER" != "" ]; then
  659.     USER="$LPUSER@$LPHOST"
  660. else
  661.     USER=""
  662. fi
  663.  
  664. #
  665. #    Main Program, just cobble together the pipeline and run it
  666. #
  667. #    The malarky with file descriptors 1 and 3 is to avoid a bug in
  668. #    (some versions?) of Ghostscript where Postscript's stdout gets
  669. #    intermingled with the printer drivers output, resulting in
  670. #    corrupted image data.
  671. #
  672. GS="$GSBIN -q -dBATCH -dSAFER -dQUIET -dNOPAUSE"
  673.  
  674. foo2zjs-pstops $PSTOPS_OPTS | \
  675. $PREFILTER \
  676. | ($GS $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS \
  677.     -sOutputFile="|cat 1>&3" $GAMMAFILE -_ >/dev/null) 3>&1 \
  678. | foo2slx -r$RES -g$DIM -p$PAPER -m$MEDIA -n$COPIES -d$DUPLEX -s$SOURCE \
  679.         -z$MODEL $COLOR $CLIP_UL $CLIP_LR $CLIP_LOG $SAVETONER \
  680.         -J "$LPJOB" -U "$USER" \
  681.         $BC $AIB $COLOR2MONO $NOPLANES $EXTRAPAD -D$DEBUG
  682.  
  683. #
  684. #    Log the command line, for debugging and problem reports
  685. #
  686. if [ -x /usr/bin/logger ]; then
  687.     logger -t "$BASENAME" -p lpr.info -- \
  688.     "$GSBIN $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS $GAMMAFILE"
  689.     logger -t "$BASENAME" -p lpr.info -- \
  690.     "foo2slx -r$RES -g$DIM -p$PAPER -m$MEDIA \
  691. -n$COPIES -d$DUPLEX -s$SOURCE -z$MODEL $COLOR $CLIP_UL $CLIP_LR $CLIP_LOG \
  692. $SAVETONER $BC $AIB $COLOR2MONO $NOPLANES $EXTRAPAD"
  693. fi
  694.  
  695. #
  696. #    Remove cruft
  697. #
  698. if [ $DEBUG -eq 0 ]; then
  699.     for i in crd.ps log usecie.ps selcrd.ps
  700.     do
  701.     file="$ICCTMP.$i"
  702.     [ -f $file ] && rm -f $file
  703.     done
  704.     [ -f "$TMPFILE" ] && rm -f $TMPFILE
  705. fi
  706.  
  707. exit 0
  708.